JavaScript 數據類型 & 內存


Posted by hata0833 on 2022-09-05

JavaScript有七種數據類型

  • 基本數據類型:null、undefined、number、string、BigInt、Symbol
  • 引用數據類型:Object

基本數據類型是存在棧內存中的,因為長度小,使用頻率高
而引用數據類型占用的空間大且不定,所以是用指針將引用數據類型的地址存下來放在棧中

const保證的是變量指向的地址不變,引用數據類型存的是指針,指向實際對象存儲在堆中的地址,改變對象中的值不會改變指針指向的地址,所以const聲明的對象是可以改變的

而基本數據類型,變量直接指向存著值的地址,所以視為常量
這裡困擾了我很久,應該怎麼理解呢
首先從一個例子說起

var a = 1;
var b = 1;
a === b; // true

第一行聲明了一個a,並且賦了一個1的值,檢查棧中有沒有1的值,沒有就將1放入棧中,並把地址分給a,使a指向1的地址
現在棧中有1,地址為零,a指向地址0

    stack
0|     1     | a 
--------------
1|           |
--------------
2|           |
--------------

第二行聲明了一個b,一樣賦了1值,檢查棧中有沒有1的值,發現有,於是把地址分給b,使b指向1的地址

    stack
0|     1     | a b
--------------
1|           |
--------------
2|           |
--------------

於是第三行的a === b 為true
現在將a的值改成3,棧中沒有3的值,將3放入棧中,把a的值改成地址1

a = 3;
    stack
0|     1     | b
--------------
1|     3     | a
--------------
2|           |
--------------

內存中的值是不會更改的,在更改值時,只會寫入新的值,而用不到的值會在JS回收機制中被清除


#javascript







Related Posts

What Type of Laser Engraving Machine Should be Used for Stainless Steel Engraving?

What Type of Laser Engraving Machine Should be Used for Stainless Steel Engraving?

Arweave 介紹

Arweave 介紹

Truthy 與 Falsy

Truthy 與 Falsy


Comments